//接口：接口是一系列抽象方法的声明，是一些方法特征的集合，这些方法都是抽象的，需要有具体的类去实现，然后第三方就可以通过这组抽象方法调用，让具体的类执行具体的方法。
//ts中接口用来定义对象的类型，是对 对象属性和方法的描述
//使用接口定义对象的类型

//ts中  普通对象
let obj5:{name:string,age:number,sex?:string,[propName:string]:unknown};
obj5 = {
    name:'tom',
    age:20,
    sex:'男',
    hobby:'赚钱'
}

//情景：如果说，我要写很多对象，对象中属性的属性和方法，数据类型和值都是一样的，按照普通的方法来写，要写很多遍。这个时候，就用到了接口。

//接口   对象接口，是对对象属性值和方法的描述(数据类型和值)
// ? 可选属性  代表 该属性可写可不写 都不会报错
//readonly  代表 只读
interface objGrop{
    readonly name:string,
    age:number,
    sex:string,
    hobby?:string,
    [propName:string]:unknown
}

let objTom:objGrop = {
    name:'tom',
    age:20,
    sex:'男',
    hobby:'打球',
    gb_frend:'mary'
}

let objMary:objGrop = {
    name:'mary',
    age:19,
    sex:'女',
    hobby:'看书',
    gd_frend:'Tom'
}
objMary.hobby = '看电影'
// objMary.name = 'jimi'  报错  因为该属性在接口中设置为只读，禁止修改
export {
    objTom,
    objMary
}

//类型检查器，会自动查看对象内部的属性 是否与接口当中描述的 一致，不一致就会报错。